<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Compile Time Reflection and Template Meta-Programming in C++</title>
<link rel="stylesheet" type="text/css" href="https://gcc.gnu.org/gcc.css" />
</head>

<body>
<h1>Compile Time Reflection for C++</h1>

<p>This works is part of the effort of providing support for compile
time reflection in C++.  A basic example of such feature is the   
type traits proposal by John Maddock.  More generally, this project
aims at providing support for compile-time features that enhance and
facilitate development of C++ libraries and application programs.</p> 


<h1>Template Meta-Programming</h1>

<p>This sub-project aims at implementing and providing experience with
features that improve support for template meta-programming and
constrained genericity in C++.</p>

<h3>Contributing</h3>

<p>Checkout the <code>cxx-reflection-branch</code> branch
in our respository.</p>

<p>When posting to the development lists, please mark messages and patches with
<code>[cxx-reflection]</code> in the subject.  As this is a branch, and not
the mainline, the usual maintainer rules do not apply.  This branch is
maintained by <a href="mailto:gdr@acm.org">Gabriel Dos Reis</a>. 
Approval from the usual maintainers will be needed when submitting
patches from the branch onto the mainline.</p> 

<h3>Branch stability</h3>

<p>While this is an experimental branch and people are encouraged to
add new features to it, default bootstraps and c-torture, C++ and Java
tests <em>must always work</em> before a patch is allowed in the
branch.  If you want to contribute a new feature that is still not
complete, you should:</p>

<ol>
<li>Add a new -f flag to enable your code.</li>
<li>Document the new -f flag in doc/invoke.texi.</li>
<li>Configure and bootstrap the compiler with all the default front ends
    enabled.</li>
<li>Run <code>make check</code> with no new regressions.</li>
</ol>

<p>Patches that break default bootstraps will be removed (if a
fix is not immediately obvious).</p>

<p>When submitting patches that implement new fonctionalities, please
include a reference to the paper and/or book where you are getting the
complete syntactic and semantic specifications from.  If it's your own
research work, include a Technical Report, Thesis or Paper reference
for it.</p> 

<p>There are regular mainline merges about 3 or 4 times a month.  The
latest merge tag is always added to GCC's version string.  A merge may
be postponed if there is major breakage in mainline.</p>

<p>Work from the branch will be incorporated into mainline only if</p>
<ol> 
<li>it can be proved that it provides better way to implement an
existing standard feature; or</li>
<li>it aims at implementing features under standardization; or</li>
<li>its specifications are clearly written in Standardeze and its
usefulness is acknowledged and accepted by the C++ front-end maintainers.</li>
</ol>

</body>
</html>
